home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Headers / architecture / i386 / fpu.h < prev    next >
Text File  |  1992-10-14  |  2KB  |  132 lines

  1. /*
  2.  * Copyright (c) 1992 NeXT Computer, Inc.
  3.  *
  4.  * Intel386 Family:    Floating Point unit.
  5.  *
  6.  * HISTORY
  7.  *
  8.  * 5 October 1992 David E. Bohman at NeXT
  9.  *    Added names to previously unamed fields in the mantissa.
  10.  *
  11.  * 5 April 1992 David E. Bohman at NeXT
  12.  *    Created.
  13.  */
  14.  
  15. /*
  16.  * Data register.
  17.  */
  18.  
  19. typedef struct fp_data_reg {
  20.     unsigned short        mant;
  21.     unsigned short        mant1    :16,
  22.                 mant2    :16,
  23.                 mant3    :16;
  24.     unsigned short        exp    :15,
  25.                     sign    :1;
  26. } fp_data_reg_t;
  27.  
  28. /*
  29.  * Data register stack.
  30.  */
  31.  
  32. typedef struct fp_stack {
  33.     fp_data_reg_t        ST[8];
  34. } fp_stack_t;
  35.  
  36. /*
  37.  * Register stack tag word.
  38.  */
  39.  
  40. typedef struct fp_tag {
  41.     unsigned short        tag0    :2,
  42.                     tag1    :2,
  43.                 tag2    :2,
  44.                 tag3    :2,
  45.                     tag4    :2,
  46.                 tag5    :2,
  47.                 tag6    :2,
  48.                 tag7    :2;
  49. #define FP_TAG_VALID        0
  50. #define FP_TAG_ZERO        1
  51. #define FP_TAG_SPEC        2
  52. #define FP_TAG_EMPTY        3
  53. } fp_tag_t;
  54.  
  55. /*
  56.  * Status word.
  57.  */
  58.  
  59. typedef struct fp_status {
  60.     unsigned short        invalid    :1,
  61.                     denorm    :1,
  62.                 zdiv    :1,
  63.                 ovrfl    :1,
  64.                 undfl    :1,
  65.                 precis    :1,
  66.                 stkflt    :1,
  67.                 errsumm    :1,
  68.                 c0    :1,
  69.                 c1    :1,
  70.                 c2    :1,
  71.                 tos    :3,
  72.                 c3    :1,
  73.                 busy    :1;
  74. } fp_status_t;
  75.  
  76. /*
  77.  * Control word.
  78.  */
  79.  
  80. typedef struct fp_control {
  81.     unsigned short        invalid    :1,
  82.                     denorm    :1,
  83.                 zdiv    :1,
  84.                 ovrfl    :1,
  85.                 undfl    :1,
  86.                 precis    :1,
  87.                     :2,
  88.                 pc    :2,
  89. #define FP_PREC_24B        0
  90. #define    FP_PREC_53B        2
  91. #define FP_PREC_64B        3
  92.                 rc    :2,
  93. #define FP_RND_NEAR        0
  94. #define FP_RND_DOWN        1
  95. #define FP_RND_UP        2
  96. #define FP_CHOP            3
  97.                 /*inf*/    :1,
  98.                     :3;
  99. } fp_control_t;
  100.  
  101. #import <architecture/i386/sel.h>
  102.  
  103. /*
  104.  * Floating point 'environment'
  105.  * used by FSTENV/FLDENV instructions.
  106.  */
  107.  
  108. typedef struct fp_env {
  109.     fp_control_t        control;
  110.     unsigned short            :16;
  111.     fp_status_t            status;
  112.     unsigned short            :16;
  113.     fp_tag_t            tag;
  114.     unsigned short            :16;
  115.     unsigned int        ip;
  116.     sel_t            cs;
  117.     unsigned short        opcode;
  118.     unsigned int        dp;
  119.     sel_t            ds;
  120.     unsigned short            :16;
  121. } fp_env_t;
  122.  
  123. /*
  124.  * Floating point state
  125.  * used by FSAVE/FRSTOR instructions.
  126.  */
  127.  
  128. typedef struct fp_state {
  129.     fp_env_t            environ;
  130.     fp_stack_t            stack;
  131. } fp_state_t;
  132.